<?php
namespace src\logic;
/**************************************************************
 *  踢普通管理	----0x01          踢普通用户	 ----0x02     禁言超级管理员      ----0x04
 *  禁言房主        ----0x08          禁言普通管理  ----0x10        禁言普通用户	  ----0x20
 *  防御禁言	----0x40          防御被踢	 ----0x800  设/卸管理              ----0x80
 *  主播房主        ----0x100  普通管理员      ----0x200  超级管理员             ----0x400
 **************************************************************/
use \classlib\core as C;
class laccess {
	/**
	 * 获取缓存的ckey信息
	 * @param unknown $userid
	 * @return string
	 */
	private static function ckey($studioid) {
		$ckey = sprintf('access_%d', $studioid);
		return $ckey;
	}
	
	/**
	 * 获取用户的权限资料信息
	 * @param int $userid
	 * @param int $studioid
	 */
	private function get_user_studio_access($userid, $studioid) {
		$studio = C\model::load('main.pl.studio')->get_one($studioid);
		$access = 0;
		if ($studio && $studio['userid'] == $userid) { //主播自己的话
			$access = 0x01 | 0x02 | 0x10 | 0x20 | 0x40 | 0x80 | 0x100 | 0x800;
		}
		$where  = array('userid'=>$userid, 'studioid'=>$studioid);
		$manager= C\model::load('main.pl.manager')->set_dev($studioid)->get_item($where);
		if ($manager) {
			$access |= (0x02 | 0x20 | 0x200);
		}
		//判断是否直播间守护者
		$reftype = lvipsquad::get($userid, $studioid);
		if ($reftype == lvipsquad::YRefType) {
			$access |= (0x40 | 0x20 | 0x02 |0x800);
		} else if ($reftype == lvipsquad::MRefType) {
			$access |= (0x40 | 0x800 | 0x20 | 0x02);	
		}
		return $access;
	}
	
	/**
	 * 通过用户id编号获取会员的权限
	 * @param unknown $userid
	 */
	public static function get_access($userid, $studioid) {
		$redis = \classlib\cache::inst('redis')->inst();
		$ckey  = self::ckey($studioid);
		$access= $redis->hGet($ckey, $userid);
		//非数值说明没有取到信息
		if (!is_numeric($access)) {
			$access = self::get_user_studio_access($userid, $studioid);
			$redis->hSet($ckey, $userid, $access);
		}
		return $access;
	}
	
	/**
	 * 重置会员权限信息
	 * @param unknown $userid
	 * @param unknown $studioid
	 */
	public static function reset($userid, $studioid) {
		$redis  = \classlib\cache::inst('redis')->inst();
		$ckey   = self::ckey($studioid);
		$access = self::get_user_studio_access($userid, $studioid);
		$redis->hSet($ckey, $userid, $access);
		return $access;
	}
	
	/**
	 * 设置该用户变成超级管理
	 * @param int $userid
	 * @param int $studioid
	 */
	public static function super($userid, $studioid) {
		$redis  = \classlib\cache::inst('redis')->inst();
		$ckey   = self::ckey($studioid);
		$access = 0x7fffffff;
		$redis->hSet($ckey, $userid, $access);
	}
}